#pragma once

#include "BoardCell.h"
#include "Board.h"

enum GameTypes
{	
	MULTIPLES,
	FACTORS,
	PRIMES,
	EQUALITY,
	INEQUALITY,

	CHALLANGE,
	DIVISORS
};

class GameRules
{
public:
	static GameRules * Instance();
protected:
	static GameRules * instance;
	GameRules();
public:
	~GameRules(void);
	void Initialise(GameTypes gameType, int level, double levelNumber);

	Board * GenerateBoard();

	bool IsEdible(BoardCell * boardCell);

	bool BoardComplete(Board * board);

	void SetGameType(GameTypes gameType);
	GameTypes GetGameType();

	void SetLevel(int level);
	int GetLevel();

	void SetLevelNumber(double levelNumber);
	double GetLevelNumber();

	std::wstring GetLevelString(); //returns the level string eg "Factors of 20"

private:
	GameTypes gameType;
	double levelNumber; //eg Multiples of 4 or Factors of 20 
	int level;
};
